#include "itemdialog.h"
#include "ui_itemdialog.h"
#include <QDebug>

ItemDialog::ItemDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::ItemDialog)
    , m_editMode(false)
    , m_itemId(0)
{
    ui->setupUi(this);
    
    // 设置窗口属性
    setWindowTitle("添加物品");
    setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
    setModal(true);
    resize(400, 300);
    
    // 设置输入框的占位符文本
    ui->nameEdit->setPlaceholderText("请输入物品名称");
    ui->modelEdit->setPlaceholderText("请输入规格型号");
    ui->locationEdit->setPlaceholderText("请输入存放位置");
    
    // 设置数量输入框的范围
    ui->quantitySpinBox->setRange(0, 999999);
    ui->quantitySpinBox->setValue(0);
    
    // 连接信号槽
    connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &ItemDialog::onAccepted);
    connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &ItemDialog::onRejected);
    
    // 焦点设置到名称输入框
    ui->nameEdit->setFocus();
}

ItemDialog::~ItemDialog()
{
    delete ui;
}

// 设置为编辑模式
void ItemDialog::setEditMode(const ItemInfo& item)
{
    m_editMode = true;
    m_itemId = item.id;
    
    setWindowTitle("编辑物品");
    
    // 填充现有数据
    ui->nameEdit->setText(item.name);
    ui->modelEdit->setText(item.model);
    ui->quantitySpinBox->setValue(item.quantity);
    ui->locationEdit->setText(item.location);
}

// 获取输入的物品信息
ItemInfo ItemDialog::getItemInfo() const
{
    ItemInfo item;
    item.id = m_itemId;
    item.name = ui->nameEdit->text().trimmed();
    item.model = ui->modelEdit->text().trimmed();
    item.quantity = ui->quantitySpinBox->value();
    item.location = ui->locationEdit->text().trimmed();
    return item;
}

// 验证输入数据
bool ItemDialog::validateInput()
{
    // 检查物品名称
    if (ui->nameEdit->text().trimmed().isEmpty()) {
        QMessageBox::warning(this, "输入错误", "请输入物品名称！");
        ui->nameEdit->setFocus();
        return false;
    }
    
    // 检查物品名称长度
    if (ui->nameEdit->text().trimmed().length() > 50) {
        QMessageBox::warning(this, "输入错误", "物品名称不能超过50个字符！");
        ui->nameEdit->setFocus();
        return false;
    }
    
    // 检查规格型号长度
    if (ui->modelEdit->text().trimmed().length() > 50) {
        QMessageBox::warning(this, "输入错误", "规格型号不能超过50个字符！");
        ui->modelEdit->setFocus();
        return false;
    }
    
    // 检查存放位置
    if (ui->locationEdit->text().trimmed().isEmpty()) {
        QMessageBox::warning(this, "输入错误", "请输入存放位置！");
        ui->locationEdit->setFocus();
        return false;
    }
    
    // 检查存放位置长度
    if (ui->locationEdit->text().trimmed().length() > 50) {
        QMessageBox::warning(this, "输入错误", "存放位置不能超过50个字符！");
        ui->locationEdit->setFocus();
        return false;
    }
    
    // 检查库存数量
    if (ui->quantitySpinBox->value() < 0) {
        QMessageBox::warning(this, "输入错误", "库存数量不能为负数！");
        ui->quantitySpinBox->setFocus();
        return false;
    }
    
    return true;
}

// 清空输入框
void ItemDialog::clearInputs()
{
    ui->nameEdit->clear();
    ui->modelEdit->clear();
    ui->quantitySpinBox->setValue(0);
    ui->locationEdit->clear();
    ui->nameEdit->setFocus();
}

// 确定按钮点击
void ItemDialog::onAccepted()
{
    if (!validateInput()) {
        return;
    }
    
    DatabaseManager& dbManager = DatabaseManager::getInstance();
    ItemInfo item = getItemInfo();
    bool success = false;
    
    if (m_editMode) {
        // 编辑模式
        success = dbManager.updateItem(item.id, item.name, item.model, item.quantity, item.location);
        if (success) {
            QMessageBox::information(this, "成功", "物品信息更新成功！");
        } else {
            QMessageBox::critical(this, "错误", "更新物品信息失败！");
            return;
        }
    } else {
        // 添加模式
        success = dbManager.addItem(item.name, item.model, item.quantity, item.location);
        if (success) {
            QMessageBox::information(this, "成功", "物品添加成功！");
        } else {
            QMessageBox::critical(this, "错误", "添加物品失败！");
            return;
        }
    }
    
    accept();
}

// 取消按钮点击
void ItemDialog::onRejected()
{
    reject();
}